home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1998 September / Macworld (1998-09).dmg / Shareware World / Info / For Developers / MacZoop 1.8.3 / More Classes / Streaming Classes / ZClassRegistry.h < prev    next >
Text File  |  1998-06-12  |  2KB  |  85 lines

  1. /*************************************************************************************************
  2. *
  3. *
  4. *            MacZoop - "the framework for the rest of us"         
  5. *
  6. *
  7. *
  8. *            ZClassRegistry.h        -- registry of classes used for persistent objects
  9. *
  10. *
  11. *
  12. *
  13. *
  14. *            © 1998, Graham Cox
  15. *
  16. *
  17. *
  18. *
  19. *************************************************************************************************/
  20.  
  21.  
  22. #pragma once
  23.  
  24. #ifndef __ZCLASSREGISTRY__
  25. #define    __ZCLASSREGISTRY__
  26.  
  27. #include    "ZArray.h"
  28. #include    "ZObject.h"
  29.  
  30.  
  31. class    ZStream;
  32.  
  33.  
  34.  
  35. typedef struct
  36. {
  37.     OSType                    classid;
  38.     ConstructorFunction        newfunc;
  39.     Str31                    classname;
  40. }
  41. Object_Info;
  42.  
  43.  
  44.  
  45. class    ZClassRegistry    : public ZArray
  46. {
  47. public:
  48.  
  49.     ZClassRegistry();
  50.     virtual ~ZClassRegistry();
  51.  
  52.     virtual void        RegisterClass( OSType aType, ConstructorFunction aFunc, Str255 aName );
  53.     virtual void        GetNameOfClass( OSType aType, Str31 aName );
  54.     virtual ZObject*    InstantiateClass( OSType aType );
  55.     virtual ZObject*    InstantiateClass( Str31 aName );
  56.     virtual long        FindClass( OSType aType );
  57.     virtual long        FindClass( Str31 aName );
  58.     
  59. // for simplicity and convenience, the object reanimator method is put here- we don't need
  60. // another class for it. This returns the root object built from the stream, and any other
  61. // objects it creates along the way as data members or globals.
  62.  
  63.     virtual ZObject*    InstantiateFromStream( ZStream* aStream );        
  64. };
  65.  
  66.  
  67.  
  68.  
  69. // errors:
  70.  
  71.  
  72. enum
  73. {
  74.     kClassTypeUnknownErr            = 601,
  75.     kClassNameUnknownErr,
  76.     kBadConstructorFuncErr
  77. };
  78.  
  79. // handy macro for hiding nasty details of registering a class
  80.  
  81. #define        REGISTERCLASS( x )    gClasses->RegisterClass( CLASSID( x ), CONSTRUCTORFUNCTION( x ), CLASSNAME( x ))
  82.  
  83.  
  84. #endif
  85.